﻿/// <reference path="jquery-1.4.2-vsdoc.js" />
/// <reference path="Default.js" />

// ------------- //
// -- Dialogs -- //
// ------------- //

function saveDialog(Controller, id) {
    ///	<summary>
    ///	    Exibe um dialog para confirmação de inclusão ou alteração de registros
    ///	</summary>
    ///	<param name="Controller" optional="false" type="string">Nome do controller.</param>
    ///	<param name="Action" optional="false" type="string">Define se a tela de progresso será exibida ou ocultada.</param>
    ///	<param name="Option" optional="false" type="string">Ação à ser executada. As opções válidas são 'Insert' e 'Update'.</param>
    ///	<param name="ID_FNPR" optional="false" type="Boolean">Define se a tela de progresso será exibida ou ocultada.</param>
    var url = '/' + Controller + '/Edit/' + id;
    progressDialog(true);
    $.post(url, $('form').serialize(), function (data) {
        if (IsNumeric(data))
            loadOption('/' + Controller + '/Details/' + id, true);
        else {
            progressDialog(false);
            listErros(data);
        }

    }, 'json');
}

function deleteDialog(Element, Controller, id) {
    ///	<summary>
    ///	    Exibe um dialog para confirmação da exclusão do registro selecionado
    ///	</summary>
    ///	<param name="Element" optional="false" type="string">Nome do elemento que aparecerá no texto de confirmação.</param>
    ///	<param name="Controller" optional="false" type="string">Nome do controller.</param>
    ///	<param name="Action" optional="false" type="string">Nome do action.</param>
    ///	<param name="Redirect" optional="true" type="string">Url de redirecionamento.</param>
    ///	<param name="ID_FNPR" optional="false" type="int">Id da função programa.</param>
    ///	<param name="ID_FNPRRedirect" optional="true" type="int">Id da função de programa da url de redirecionamento.</param>
    var url = '/' + Controller + '/Delete/' + id;
    confirmDialog('Atenção', 'Deseja realmente excluir este(a) ' + Element + '?', 300, null, function () {
        progressDialog(true);
        $.getJSON(url, null, function (data) {
            progressDialog(false);
            if (data == true)
                loadOption('/' + Controller + '/Index', true);
            else
                listErros(data);
        });
    });
}

function jqGridSetColumns(obj, ID_TABELA) {
    ///	<summary>
    ///	    Controle para exibição de colunas indivudual para cada usuário
    ///	</summary>
    ///	<param name="obj" optional="false" type="obj">Tabela atual, padrão $(this)</param>
    ///	<param name="ID_TABELA" optional="false" type="string">Id da tabela, deve ser o mesmo valor do ID_FNPR.</param>
    obj.setColumns({
        colnameview: false,
        afterSubmitForm: function (id) {
            var COLS = '';
            for (var i = 0; i < $(id.selector + ' table tr td input').length; i++) {
                if ($($(id.selector + ' table tr td input')[i]).is(':checked'))
                    COLS += '1';
                else
                    COLS += '0';
            }
            $.getJSON('/Default/ColunasTabelaUpdate', { ID_FNPR: 8868, ID_TABELA: ID_TABELA, COLS: COLS });
        }
    });
}

function jqGridEdit(Title, Table, q, LoadUrl, EditUrl, Id, Width, Form, CallBack, Index, FnComplete, Program, extraParams, input,onCancel) {
    ///	<summary>
    ///	    Exibe um dialog para edição de itens do grid
    ///	</summary>
    ///	<param name="Title" optional="false" type="string">Título do dialog.</param>
    ///	<param name="Table" optional="false" type="string">Nome da tabela.</param>
    ///	<param name="q" optional="false" type="string">Deprecated.</param>
    ///	<param name="LoadUrl" optional="true" type="string">Url de carregamento da view.</param>
    ///	<param name="EditUrl" optional="false" type="int">Url de execução do cadastro.</param>
    ///	<param name="Id" optional="true" type="int">Id do elemento (quando for uma alteração).</param>
    ///	<param name="Width" optional="true" type="string">Largura do dialog, não obrigatório.</param>
    ///	<param name="Form" optional="false" type="string">Nome do form de edição.</param>
    ///	<param name="CallBack" optional="false" type="fn">Função disparada no evento open do dialog.</param>
    ///	<param name="Index" optional="true" type="int">Index da tab que será recarregada (quando o registro alterado for único).</param>
    ///	<param name="FnComplete" optional="false" type="fn">Função disparada após o fechamento do dialog.</param>
    ///	<param name="Program" optional="true" type="string">Deprecated.</param>
    ///	<param name="ID_FNPRLoad" optional="true" type="int">Id da função de programa da url de carregamento da view.</param>
    ///	<param name="ID_FNPREdit" optional="true" type="int">Id da função de programa da url de execução da ação.</param>
    ///	<param name="onCancel" optional="true" type="function">Função disparada ao clicar no botão de cancelar.</param>
    var sr = $('#' + Table).getGridParam('selrow');
    if (Table != null && sr == null && Id != null) {
        messageDialog('Atenção', 'Selecione um registro para efetuar a alteração', 320);
    }
    else {
        progressDialog(true);
        $.get(LoadUrl, extraParams, function (a, b, c) {
            if (b != 'error') {
                $('<div id="__gridedit">').appendTo('body');
                $('#__gridedit').load(LoadUrl + '/' + Id, extraParams, function () {
                    $('#__gridedit').dialog({
                        closeOnEscape: true,
                        title: Title,
                        modal: true,
                        position: "center",
                        width: Width == null ? 'auto' : Width,
                        minHeight: 30,
                        resizable: false,
                        stack: false,
                        open: function () {
                            progressDialog(false);
                            if (CallBack != null) {
                                CallBack();
                            }
                            $('.setfocus input, .setfocus select').select();
                            loadInputs();
                            ButtonTheme();
                        },
                        close: function () {
                            $('#__gridedit').dialog('destroy').remove();
                        },
                        buttons: {
                            'Cancelar': function () {
                                $('#__gridedit').dialog('destroy').remove();
                                if (onCancel)
                                    onCancel();
                            },
                            'Salvar': function () {
                                progressDialog(true);
                                $.post(EditUrl, $('#' + Form).serialize() + '&' + $('#MainForm').serialize() + extraParams, function (data) {
                                    progressDialog(false);
                                    if (data.result == true) {
                                        $('#__gridedit').dialog('destroy').remove();
                                        $('#' + Table).trigger('reloadGrid');

                                        if (Index)
                                            $('#tabscontainer').tabs('load', Index);

                                        if (FnComplete)
                                            FnComplete();

                                        if (data.value && input)
                                            $('#' + input).val(data.value);
                                    }
                                    else {
                                        listErros(data.erros);
                                    }
                                }, 'json');
                            }
                        }
                    });
                });
            }
        });
    }
}

function jqGridDelete(Table, Url, Id, ID_FNPR) {
    ///	<summary>
    ///	    Exibe um dialog para exclusão de itens do grid
    ///	</summary>
    ///	<param name="Table" optional="false" type="string">Nome da tabela.</param>
    ///	<param name="Url" optional="false" type="string">Url de exclusão do item.</param>
    ///	<param name="Id" optional="false" type="int">Id do item à ser excluído.</param>
    ///	<param name="ID_FNPR" optional="false" type="int">Id da função de programa da url de execução da ação.</param>
    var sr = $('#' + Table).getGridParam('selrow');
    if (sr == null) {
        messageDialog('Atenção!', 'É necessário selecionar um item para efetuar a exclusão', 360);
    }
    else {
        $.get(Url, null, function (a, b, c) {
            if (b != 'error') {
                confirmDialog('Atenção!', 'Deseja realmente excluir este item?', 400, 150, function () {
                    var rowData = $('#' + Table).getRowData(sr);
                    $.post(Url + '/' + rowData[Id], null, function (data) {
                        if (data == true) {
                            $('#' + Table).trigger('reloadGrid');
                        }
                        else {
                            listErros(data);
                        }
                    }, 'json');
                });
            }
        });
    }
}

function progressDialog(show) {
    ///	<summary>
    ///	    Exibe uma barra de progresso no centro da tela e inibe a ação do usuário
    ///	</summary>
    ///	<param name="show" type="Boolean">Define se a tela de progresso será exibida ou ocultada.</param>
    if ($('#__wait').length > 0) {
        $('#__wait').dialog("destroy").remove();
        $('.ui-dialog-titlebar').css('display', 'block');
    }
    if (show) {
        var wait = $('<div id="__wait" style="padding: 5px 0 0 12px;">').append('<img src="../../Content/Images/ajax-loader.gif" style="margin-right: 6px;" />')
                                         .append('<span> Aguarde</span>')
                                         .appendTo('body');
        wait.dialog({
            modal: true,
            minHeight: 0,
            minWidth: 0,
            closeOnEscape: false,
            height: 58,
            width: 94,
            resizable: false,
            dragable: false,
            dialogClass: 'ui-state-default ui-corner-all progress',
            open: function () {
                $('.ui-dialog-titlebar:last').css('display', 'none');
            }
        });
    }
}

function messageDialog(title, message, largura, fnOK, altura) {
    ///	<summary>
    ///	    Exibe um dialog com uma mensagem e um botão de confirmação
    ///	</summary>
    ///	<param name="title" type="String">Título da mensagem.</param>
    ///	<param name="message" type="String">Texto da mensagem.</param>
    ///	<param name="largura" type="Integer">Largura do dialog.</param>
    ///	<param name="fnOK" type="function">Callback executado após o clique no botão de confirmação.</param>
    $('<div id="__message">').appendTo('body');
    $("#__message").html(message).dialog({
        closeOnEscape: true,
        title: title,
        buttons: {
            "Ok": function () {
                if (fnOK != null) {
                    fnOK();
                }
                $('#__message').dialog('destroy').remove();
            }
        },
        modal: true,
        minHeight: 40,
        position: "center",
        resizable: false,
        width: largura ? largura : 500,
        close: function () {
            if (fnOK != null) {
                fnOK();
            }
            $('#__message').dialog('destroy').remove();
        }
    });
}

function confirmDialog(title, message, x, y, fnYes, fnNo) {
    ///	<summary>
    ///	    Exibe um dialog com uma mensagem para confirmação.
    ///	</summary>
    ///	<param name="title" type="String">Título da mensagem.</param>
    ///	<param name="message" type="String">Mensagem.</param>
    ///	<param name="largura" type="Integer">Largura do dialog.</param>
    ///	<param name="largura" type="Integer">Altura do dialog.</param>
    ///	<param name="fnYes" type="function">Callback executado ao clicar no botão 'Sim'.</param>
    ///	<param name="fnNo" type="function">Callback executado ao clicar no botão 'Não'.</param>
    $('<div id="__confirm">').appendTo('body');
    if (fnYes == null)
        fnYes = function () { };
    if (fnNo == null)
        fnNo = function () { };
    $('#__confirm').html(message).dialog({
        closeOnEscape: true,
        title: title,
        resizable: false,
        draggable: false,
        modal: true,
        position: "center",
        width: x ? x : 500,
        height: y ? y : 'auto',
        minHeight: 80,
        minWidth: 100,
        close: function () { fnNo(); $('#__confirm').dialog('destroy').remove(); },
        buttons: {
            'Não': function () {
                fnNo();
                $('#__confirm').dialog('destroy').remove();
            },
            'Sim': function () {
                fnYes();
                $('#__confirm').dialog('destroy').remove();
            }
        }
    });
}

function produtoPropriedades(fn, COD_PROD) {
    ///	<summary>
    ///	    Verifica se o produto possui propriedades e exibe um dialog para confirmação destas
    ///	</summary>    
    ///	<param name="dialog" type="obj">Função disparada após o fechamento da dialog.</param>
    ///	<param name="dialog" type="int">Código do produto quando a função for disparada em um dialog.</param>
    progressDialog(true);
    $("#ID_VLPR01").val('');
    $("#ID_VLPR02").val('');
    $("#ID_VLPR03").val('');
    // Se o produto tem propriedades, abre janela para preenche-las
    $.getJSON("/Produtos/ProdutoPropriedades", { ID_FNPR: 8043, COD_PROD: COD_PROD ? COD_PROD : $("#COD_PROD").val() }, function (data) {
        if (data.length > 0) {
            // Abre a janela para selecionar as propriedades, se tiver
            $('<div id="__propriedades">').appendTo('form');
            $("#__propriedades").load("/Produtos/ProdutoEspecifico", { ID_FNPR: 8037, COD_PROD: $("#COD_PROD").val() }, function () {
                progressDialog(false);
                $("#__propriedades").dialog({
                    closeOnEscape: true,
                    width: 'auto',
                    title: "Selecione as características do produto",
                    modal: true,
                    position: "center",
                    resizable: false,
                    open: function () { loadInputs(); },
                    buttons: {
                        'Cancelar': function () { $('#__propriedades').dialog('destroy').remove(); },
                        'Confirmar': function () {
                            $('#PROP01').val($('#PROPRIEDADE01').val());
                            $('#PROP02').val($('#PROPRIEDADE02').val());
                            $('#PROP03').val($('#PROPRIEDADE03').val());
                            $('#ID_VLPR01').val($('#_ID_VLPR01 option:selected').val());
                            $('#ID_VLPR02').val($('#_ID_VLPR02 option:selected').val());
                            $('#ID_VLPR03').val($('#_ID_VLPR03 option:selected').val());
                            $('#DESC_PROP01').val($('#_ID_VLPR01 option:selected').text());
                            $('#DESC_PROP02').val($('#_ID_VLPR02 option:selected').text());
                            $('#DESC_PROP03').val($('#_ID_VLPR03 option:selected').text());
                            fn();
                            $('#__propriedades').dialog('destroy').remove();
                        }
                    }
                });
            });
        }
        else {
            progressDialog(false);
            fn();
        }
    });
}

// --------------- //
// -- Extensões -- //
// --------------- //
$.fn.extend({
    calendar: function (time) {
        ///	<summary>
        ///	    Exibe um calendário nos campos de data como opção para o preenchimento do campo.
        ///	</summary>
        ///	<param name="time" type="bool">Exibe a hora na formatação de data do campo.</param>
        if (time == null) time = false;
        $(this).datepicker({
            dateFormat: time ? 'dd/mm/yy hh:MM' : 'dd/mm/yy',
            prevText: 'Anterior',
            nextText: 'Próximo',
            dayNames: ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'],
            dayNamesMin: ['<font color=red>D</font>', 'S', 'T', 'Q', 'Q', 'S', 'S'],
            dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],
            monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],
            monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],
            yearSuffix: '',
            showAnim: 'fadeIn',
            duration: 'fast'
        }).setMask({ mask: '39/19/9999', selectCharsOnFocus: false, autoTab: false });
    }
});

// ------------ //
// -- Padrão -- //
// ------------ //
function loadOption(url, inner) {
    ///	<summary>
    ///	    Exibe o conteúdo infomado na página principal do sistema
    ///	</summary>
    ///	<param name="url" type="String">ActionResult que será carregado.</param>
    progressDialog(true);
    if (inner)
        window.location = url;
    else {
        $("#conteudo").attr("src", url);
        progressDialog(false);
    }
}

function listErros(data, callBack) {
    ///	<summary>
    ///	    Exibe uma lista de erros retornados do servidor
    ///	</summary>
    ///	<param name="data" type="List<string>">Lista de erros retornada do servidor.</param>
    var mensagem = '';
    $.each(data, function (i, row) {
        mensagem += (i + 1).toString() + ' - ' + row + '<br />';
    });
    messageDialog('Atenção!', mensagem, null, callBack);
}


function Periodos(obj, dataini, datafin, horaini, horafin) {
    ///	<summary>
    ///	    Define as validações de períodos em campos de data inicial e final
    ///	</summary>
    ///	<param name="obj" type="string">Id do dropdown de perídos.</param>
    ///	<param name="dataini" type="string">Id do campo data inicial.</param>
    ///	<param name="datafin" type="string">Id do campo data final.</param>
    ///	<param name="horaini" type="string">Id do campo hora inicial.</param>
    ///	<param name="horafin" type="string">Id do campo hora final.</param>
    $(obj).change(function () {
        if ($(this).val() == '') {
            $(dataini).val('');
            $(datafin).val('');
            $(horaini).val('');
            $(horafin).val('');
        }
        else {
            $.getJSON("/Consultas/DefinirPeriodo", { ID_FNPR: 8724, periodo: $(this).val() }, function (data) {
                $(dataini).val(data.DATA_INI);
                $(datafin).val(data.DATA_FIN);
                $(horaini).val('00:00');
                $(horafin).val('23:59');
            });
        }
    });
}

function fieldComplete(input, controller, id) {
    ///	<summary>
    ///	    Aplica a função autocomplete
    ///	</summary>
    ///	<param name="input" type="string">Id do objeto que receberá a função e.g. '#DESC_PROD'.</param>
    ///	<param name="controller" type="string">Nome do controller.</param>
    ///	<param name="id" type="string">Id do campo que receberá o código e.g. '#COD_PROD'</param>
    $(input).autocomplete({
        source: '/Default/AutoComplete?type=' + controller,
        minLength: 2,
        select: function (event, ui) {
            $('#' + id).val(ui.item.ide);
        }
    });
}

$.fn.focusNext = function () {
    return this.each(function () {
        var fields = $(this).parents('form:eq(0),body').find('button,input,textarea,select');
        var index = fields.index(this);
        if (index > -1 && (index + 1) < fields.length) {
            fields.eq(index + 1).focus();
        }
        return false;
    });
};

function lookup(Element, DescElement, id, type, callBack) {
    ///	<summary>
    ///	    Aplica os lookups
    ///	</summary>
    ///	<param name="Element" type="string">Nome do campo código</param>
    ///	<param name="DescElement" type="string">Nome do campo descrição.</param>
    ///	<param name="id" type="int">Id do campo código.</param>
    ///	<param name="type" type="string">Url de requisição dos valores.</param>
    ///	<param name="callBack" type="int">Id da função programa.</param>
    if (id != '') {
        progressDialog(true);
        $.getJSON('/Default/Details', { value: id, type: type, ID_FNPR: 8007 }, function (data) {
            progressDialog(false);
            if (data != null) {
                if ($("#DESC_UNID").length > 0)
                    $("#DESC_UNID").val(data.COD_UNID);
                $('#' + DescElement).val(data).focusNext();
            }
            else {
                if ($("#DESC_UNID").length > 0)
                    $("#DESC_UNID").val('');
                $('#' + Element).val('');
                $('#' + DescElement).val('').focusNext();
            }
            if (callBack)
                callBack();
        });
    }
    else
        $('#' + DescElement).val('');
}

function loadInputs() {
    ///	<summary>
    ///	    Aplica definições padrão de acordo ao tipo de input
    ///	</summary>
    ///	<param name="dialog" type="bool">Indica se a função está sendo invocada em um dialog.</param>
    $('label input[type=text], input[type=password], label select, label textarea, .ui-jqgrid .ui-pg-input, .ui-jqgrid input, .ui-jqgrid select').addClass('ui-widget ui-widget-content ui-corner-all').css({ outline: 'none' });
    $('label input[type="text"], label textarea').hover(function () { $(this).addClass('ui-state-hover'); }, function () { $(this).removeClass('ui-state-hover'); });
    $('label input[type="text"]').blur(function () { $(this).removeClass('ui-state-active'); });
    $('label input[type="text"]').focus(function () { $(this).addClass('ui-state-active'); });
    $('label input:disabled').addClass('ui-state-disabled');
    $('.hidden').hide();
    //$('label select').selectmenu({ style: 'dropdown', maxHeight: 250 });
        
    $('fieldset').addClass('ui-widget-content ui-corner-all');
    $('fieldset').not('.border').css('border', 'none');

    $('.integer input, .decimal input, .money input, .alpha input, .cpf input, .cnpj input, .cep input').addClass('masked');
    
    if ($('.setfocus input').length != 0)
        $('.setfocus input').select();
    if ($('.integer input').length != 0)
        $('.integer input').setMask('9999999999');    
    if ($('.calendar input').length != 0)
        $('.calendar input').calendar();
    if ($('.decimal input').length != 0) {
        $('.decimal input').formatCurrency({
            region: 'pt-BR'
        }).blur(function () {
            $(this).formatCurrency({
                symbol: '',
                positiveFormat: '%s %n',
                negativeFormat: '-%s %n',
                decimalSymbol: ',',
                digitGroupSymbol: '.',
                groupDigits: true
            });
        }).keyup(function (e) {
            var e = window.event || e;
            var keyUnicode = e.charCode || e.keyCode;
            if (e !== undefined) {
                switch (keyUnicode) {
                    case 16: case 17: case 18: case 35: case 36: case 37: case 38: case 39: case 40: case 78: case 110: case 190: break;
                    case 27: this.value = ''; break;
                    default: $(this).formatCurrency({
                        symbol: '',
                        positiveFormat: '%s %n',
                        negativeFormat: '-%s %n',
                        decimalSymbol: ',',
                        digitGroupSymbol: '.',
                        groupDigits: true,
                        roundToDecimalPlace: -1
                    });
                }
            }
        }).focus(function () { $(this).select() });
    }
    if ($('.money input').length != 0) {
        $('.money input').formatCurrency({
            region: 'pt-BR'
        }).blur(function () {
            $(this).formatCurrency({ region: 'pt-BR' });
        }).keyup(function (e) {
            var e = window.event || e;
            var keyUnicode = e.charCode || e.keyCode;
            if (e !== undefined) {
                switch (keyUnicode) {
                    case 16: case 17: case 18: case 35: case 36: case 37: case 38: case 39: case 40: case 78: case 110: case 190: break;
                    case 27: this.value = ''; break;
                    default: $(this).formatCurrency({ region: 'pt-BR', roundToDecimalPlace: -1 });
                }
            }
        }).focus(function () { $(this).select() });
    }
    if ($('.cpf input').length != 0)
        $('.cpf input').attr('alt', 'cpf');
    if ($('.cnpj input').length != 0)
        $('.cnpj input').attr('alt', 'cnpj');
    if ($('.cep input').length != 0)
        $('.cep input').attr('alt', 'cep');
    if ($('.hour input').length != 0)
        $('.hour input').setMask('29:59');

    if ($('.masked').length != 0)
        $('.masked').setMask();
 
    $('.ui-dialog .ui-dialog-titlebar').removeClass('ui-corner-all').addClass('ui-corner-top').css({ border: 'none', 'border-bottom': 'solid 1px #dddddd' });
}

function loadLookup(url, title, codigo, descricao, tipo, ID_PESSOA, width, tipoPessoa, triggerChange, returnValue) {
    ///	<summary>
    ///	    Exibe uma listagem predefinida de acordo ao código informado e retorna o id do campo 
    ///	</summary>
    ///	<param name="url" type="string">*Deprecated*</param>
    ///	<param name="title" type="string">Título do dialog.</param>
    ///	<param name="codigo" type="bool">Seletor do campo código.</param>
    ///	<param name="descricao" type="string">Seletor do campo descricao.</param>
    ///	<param name="tipo" type="string">Tipo do resultado e.g. 'VENDEDORES'</param>
    ///	<param name="ID_PESSOA" type="integer">Id da pessoa quando for o caso.</param>
    ///	<param name="width" type="integer">Largura do campo descrição padrão: 320.</param>
    ///	<param name="tipoPessoa" type="char">Tipo de pessoa quando for o caso: A - Loja, B - Cliente, C - Transportador.</param>
    ///	<param name="triggerChange" type="boolean">Define se o campo código será disparado com o evento change - padrão: true.</param>
    ///	<param name="returnValue" type="char">Indica se o campo descrição receberá o valor ou descrição da tabela: padrão false.</param>
    progressDialog(true);
    var lookup = $('<div id="__lookup" style="display: none;" />');
    lookup.appendTo('body');

    $(lookup).load('/Default/Lookup', { ID_FNPR: 8610 }, function (data) {
        $("#lookupTable").jqGrid({
            url: '/Default/LookupList',
            datatype: 'json',
            mtype: 'GET',
            colNames: ['Código', 'Código', 'Nome'],
            colModel: [
                { name: 'ide', index: 'ide', width: 80, align: 'right' },
                { name: 'value', index: 'value', width: 80, align: 'right', search: false, hidden: true },
                { name: 'label', index: 'label', width: width ? width : 320 }
            ],
            pager: '#lookupPager',
            width: '100%',
            height: '100%',
            rowNum: 10,
            rowList: [10, 20, 30],
            sortname: 'label',
            sortorder: 'asc',
            viewrecords: true,
            gridComplete: function () {
                $(lookup).dialog({
                    width: 'auto',
                    height: 'auto',
                    title: title,
                    modal: true,
                    position: 'center',
                    buttons: {
                        'Retornar': function () {
                            $(lookup).dialog('destroy').remove();
                        }
                    },
                    open: function () {
                        progressDialog(false);
                        lookup.removeAttr("style");
                    }
                });
            },
            ondblClickRow: function (ide) {
                var array = $('#lookupTable').getRowData(ide);
                var cont = 0;
                if (descricao) {
                    if (returnValue) {
                        $('#' + descricao).val(array['value']);
                    }
                    else {
                        $('#' + descricao).val(array['label']);
                    }
                }
                $('#' + codigo).val(ide)
                if (triggerChange) {
                    $('#' + codigo).trigger('change');
                }
                $(lookup).dialog('destroy').remove();
            },
            postData: {
                ID_PESSOA: ID_PESSOA,
                ID_FNPR: function () { return 8610; },
                type: function () { return tipo; },
                TipoPessoa: function () { return tipoPessoa; }
            }
        });
        $("#lookupTable").jqGrid('filterToolbar', { stringResult: false, searchOnEnter: false });
        $("#lookupTable").jqGrid('navGrid', '#lookupPager', { del: false, add: false, edit: false, search: false });
    });
}

function addRow(tabela, url, xparams) {
    ///	<summary>
    ///	    Adiciona uma linha no início da tabela para inclusão de registros
    ///	</summary>
    ///	<param name="tabela" type="string">Id da tabela.</param>
    ///	<param name="url" type="string">Url do servidor.</param>
    ///	<param name="xparams" type="array">Parametros extra.</param>
    var table = $('#' + tabela);
    table.jqGrid('editRow', 0, true, null, null, url, xparams, function (i, request) {
        if (request.responseText.indexOf('false') > 0) {
            listErros(eval(request.responseText), addRow(0));
        }

        table.trigger('reloadGrid');
    }, null, function () {
        table.delRowData(0);
    });
}

function editRow(tabela, url, id, xParams) {
    ///	<summary>
    ///	    Adiciona uma linha no início da tabela para inclusão de registros
    ///	</summary>
    ///	<param name="tabela" type="string">Id da tabela.</param>
    ///	<param name="url" type="string">Url do servidor.</param>
    ///	<param name="xparams" type="array">Parametros extra.</param>
    var table = $('#' + tabela);
    table.jqGrid('editRow', id, true, null, null, url, xParams, function (i, request) {
        if (request.responseText.indexOf('false') > 0) {
            listErros(eval(request.responseText), editRow(id));
        }

        table.trigger('reloadGrid');
    });
}

function changeMask(value, obj, clearValue) {
    ///	<summary>
    ///	    Alterar a máscara d eum campo
    ///	</summary>
    ///	<param name="value" type="integer">Tipo de máscara: 1 - CPF, 2 - CNPJ</param>
    ///	<param name="obj" type="obj">Elemento que receberá a nova máscara</param>
    ///	<param name="clearValue" type="boolean">Limpar o valor existente no campo</param>
    if (clearValue)
        obj.val('');

    switch (value) {
        case '1':
            obj.setMask({ mask: '999.999.999-99', autoTab: false });
            break;
        case '2':
            obj.setMask({ mask: '99.999.999/9999-99', autoTab: false });
            break;
        default:
            obj.setMask({ mask: '999.999.999.999', autoTab: false });
            break;
    }
}

function IsNumeric(value) {
    ///	<summary>
    ///	    Verificar se um valor pode ser convertido em número
    ///	</summary>
    ///	<param name="value" type="string">Valor para checagem</param>
    return (value - 0) == value && $(value).length > 0;
}

function CidadeSearch(uf, cid, ID_UF, ID_CID) {
    $('#' + cid + ' option').not(':first').remove();
    if ($('#' + uf).val() != '') {
        $.getJSON('/Enderecos/CidadeSearch', { ID_UF: ID_UF }, function (data) {
            if (data != '') {
                $.each(data, function (index, row) {
                    $("<option>").val(row.ID_CID).text(row.NOME_CID).appendTo('#' + cid);
                });
                if (ID_CID) {
                    $('#' + uf).val(ID_CID);
                }
            }
            else {
                progressDialog(false);
            }
        });
    }
}

function CalcularParcelas(valor, condicao, data) {
    ///	<summary>
    ///	    Retorna campos com valores de parcela
    ///	</summary>
    ///	<param name="valor" type="integer">Valor total do documento</param>
    ///	<param name="condicao" type="obj">Código da condicao de pagamento</param>
    ///	<param name="data" type="boolean">Data de emissão do documento</param>
    if ($('#COD_CDPG').val() != '') {
        $.getJSON('/Contas/CalcularParcelas', { valor: valor, condicao: condicao, data: data }, function (data) {
            $('.parcela').fadeOut('slow', function () {
                $('.parcela').remove();
            });
            if (data.result == true) {
                var letra = 65,
                    parcelas = $('.parcelas');

                $.each(data.parcelas, function (vencimento, valor) {
                    var asc = String.fromCharCode(letra);
                    var fieldset = $('<fieldset class="container field200 border float lessmargin parcela" style="display:none;" />'),
                        legend = $('<legend><span class="ui-state-default ui-corner-all">Parcela ' + asc + '</span></legend>'),
                        lVencimento = $('<label class="for80 ui-widget">Vencimento:</label>'),
                        lCalendar = $('<label class="input100 center calendar" />'),
                        iVencimento = $('<input type="text" id="vencimento' + asc + '" name="vencimento' + asc + '" />').val(vencimento),
                        lValor = $('<label class="for80 ui-widget clear">Valor:</label>'),
                        lMoney = $('<label class="input100 right money" />'),
                        iValor =$('<input type="text" id="valor' + asc + '" name="valor' + asc + '" />').val(valor);

                    parcelas.append(fieldset.append(legend)
                                            .append(lVencimento)
                                            .append(lCalendar.append(iVencimento))
                                            .append(lValor)
                                            .append(lMoney.append(iValor)));
                    letra++;
                });

                loadInputs();

                setTimeout(function () { $('.parcela').fadeIn('slow'), 1000 });
            }
        });
    }
    else {
        $('.parcela').fadeOut('slow', function () {
            $('.parcela').remove();
            $('<fieldset class="container parcela transparent">').appendTo($('#Pagamentos'));
        });
    }
}

function htmlEncode(value) {
    ///	<summary>
    ///	    Converte um string em html
    ///	</summary>
    ///	<param name="value" type="integer">String a ser convertida</param>
    return $('<div/>').text(value).html();
}

function htmlDecode(value) {
    ///	<summary>
    ///	    Converte um html em string
    ///	</summary>
    ///	<param name="value" type="integer">String a ser convertida</param>
    return $('<div/>').html(value).text();
}